#ifndef __GUI_SCROLLBAR_H
#define __GUI_SCROLLBAR_H

#include "gui_spirit.h"
#include "gui_color.h"

typedef enum
{
    GUI_SCROLLBAR_LEFT_TO_RIGHT = 0,
    GUI_SCROLLBAR_TOP_TO_BOTTOM,
} gui_scrollbar_type_t;

#define GUI_SCROLLBAR_DEFAULT_W 640
#define GUI_SCROLLBAR_DEFAULT_H 320

#define GUI_SCOLLBAR_BTN_SIZE 32

typedef struct
{
    gui_spirit_t spirit;         // main spirit
    gui_spirit_t scroll_spirit;  // scrollbar container(up,down btn and pos block)
    gui_spirit_t *up_btn;        // up btn
    gui_spirit_t *down_btn;      // down btn
    gui_spirit_t pos_spirit;     // pos spirit
    gui_spirit_t window_spirit;  // scrollbar buffer spirit
    gui_spirit_t show_spirit;    // user visable show spirit
    gui_scrollbar_type_t type;
    int cur_pos; // current scroll float pos
    int step;
    int width;
    int height;
    int show_width;
    int show_height;
    int pos_float_width;
    int pos_float_height;

    int start_scroll; // start scroll screen
    int start_pos;    // mouse scroll start pos
    int end_pos;      // mouse scroll end pos
} gui_scrollbar_t;

#define GUI_SCROLLBAR(spirit) ((gui_scrollbar_t *)(spirit))

gui_spirit_t *gui_scrollbar_create(int width, int height, int show_w, int show_h, int scroll_w, int scroll_h, gui_scrollbar_type_t type);
gui_spirit_t *gui_scrollbar_create_defalut(int width, int height, int show_w, int show_h, gui_scrollbar_type_t type);
void gui_scrollbar_show(gui_scrollbar_t *scrollbar);
void gui_scrollbar_update(gui_scrollbar_t *scrollbar);
void gui_scrollbar_flush_show(gui_scrollbar_t *scrollbar);
void gui_scrollbar_draw_pos_float(gui_scrollbar_t *scrollbar);
void gui_scrollbar_add_spirit(gui_scrollbar_t *scrollbar, gui_spirit_t *spirit);
void gui_scrollbar_remove_spirit(gui_scrollbar_t *scrollbar, gui_spirit_t *spirit);
void gui_scrollbar_set_show_size(gui_scrollbar_t *scrollbar, int show_w, int show_h);
void gui_scrollbar_set_window_size(gui_scrollbar_t *scrollbar, int window_w, int window_h);
void gui_scrollbar_scroll(gui_scrollbar_t *scrollbar);
void gui_scrollbar_get_window_size(gui_scrollbar_t *scrollbar,int *window_w,int *window_h);
void gui_scrollbar_get_show_size(gui_scrollbar_t *scrollbar,int *show_w,int *show_h);
void gui_scrollbar_scroll_window(gui_scrollbar_t *scrollbar,int step);
void gui_scrollbar_mouse_press(gui_scrollbar_t *scrollbar, int mouse_x, int mouse_y);
void gui_scrollbar_mouse_release(gui_scrollbar_t *scrollbar, int mouse_x, int mouse_y);
void gui_scrollbar_mouse_motion(gui_scrollbar_t *scrollbar, int mouse_x, int mouse_y);


#endif